Termination of the given ITRSProblem could successfully be proven:



ITRS
  ↳ ITRStoIDPProof

ITRS problem:
The following domains are used:

z

The TRS R consists of the following rules:

if_3(pair(yl, yh), x, ys) → app(qsort(yl), cons(x, qsort(yh)))
if_1(pair(zl, zh), x, y, zs) → Cond_if_1(>@z(x, y), zl, zh, x, y, zs)
qsort(ins(x, ys)) → if_3(split(x, ys), x, ys)
if_2(pair(zl, zh), x, y, zs) → Cond_if_2(>=@z(y, x), zl, zh, x, y, zs)
Cond_if_2(TRUE, zl, zh, x, y, zs) → pair(zl, ins(y, zh))
app(cons(x, ys), zs) → cons(x, app(ys, zs))
split(x, e) → pair(e, e)
Cond_if_1(TRUE, zl, zh, x, y, zs) → pair(ins(y, zl), zh)
Cond_split(TRUE, x, y, zs) → if_1(split(x, zs), x, y, zs)
split(x, ins(y, zs)) → Cond_split1(>=@z(y, x), x, y, zs)
Cond_split1(TRUE, x, y, zs) → if_2(split(x, zs), x, y, zs)
qsort(e) → nil
app(nil, zs) → zs
split(x, ins(y, zs)) → Cond_split(>@z(x, y), x, y, zs)

The set Q consists of the following terms:

if_3(pair(x0, x1), x2, x3)
if_1(pair(x0, x1), x2, x3, x4)
qsort(ins(x0, x1))
if_2(pair(x0, x1), x2, x3, x4)
Cond_if_2(TRUE, x0, x1, x2, x3, x4)
app(cons(x0, x1), x2)
split(x0, e)
Cond_if_1(TRUE, x0, x1, x2, x3, x4)
Cond_split(TRUE, x0, x1, x2)
split(x0, ins(x1, x2))
Cond_split1(TRUE, x0, x1, x2)
qsort(e)
app(nil, x0)


Added dependency pairs

↳ ITRS
  ↳ ITRStoIDPProof
IDP
      ↳ IDependencyGraphProof

I DP problem:
The following domains are used:

z

The ITRS R consists of the following rules:

if_3(pair(yl, yh), x, ys) → app(qsort(yl), cons(x, qsort(yh)))
if_1(pair(zl, zh), x, y, zs) → Cond_if_1(>@z(x, y), zl, zh, x, y, zs)
qsort(ins(x, ys)) → if_3(split(x, ys), x, ys)
if_2(pair(zl, zh), x, y, zs) → Cond_if_2(>=@z(y, x), zl, zh, x, y, zs)
Cond_if_2(TRUE, zl, zh, x, y, zs) → pair(zl, ins(y, zh))
app(cons(x, ys), zs) → cons(x, app(ys, zs))
split(x, e) → pair(e, e)
Cond_if_1(TRUE, zl, zh, x, y, zs) → pair(ins(y, zl), zh)
Cond_split(TRUE, x, y, zs) → if_1(split(x, zs), x, y, zs)
split(x, ins(y, zs)) → Cond_split1(>=@z(y, x), x, y, zs)
Cond_split1(TRUE, x, y, zs) → if_2(split(x, zs), x, y, zs)
qsort(e) → nil
app(nil, zs) → zs
split(x, ins(y, zs)) → Cond_split(>@z(x, y), x, y, zs)

The integer pair graph contains the following rules and edges:

(0): QSORT(ins(x[0], ys[0])) → IF_3(split(x[0], ys[0]), x[0], ys[0])
(1): COND_SPLIT(TRUE, x[1], y[1], zs[1]) → SPLIT(x[1], zs[1])
(2): SPLIT(x[2], ins(y[2], zs[2])) → COND_SPLIT(>@z(x[2], y[2]), x[2], y[2], zs[2])
(3): IF_3(pair(yl[3], yh[3]), x[3], ys[3]) → APP(qsort(yl[3]), cons(x[3], qsort(yh[3])))
(4): IF_2(pair(zl[4], zh[4]), x[4], y[4], zs[4]) → COND_IF_2(>=@z(y[4], x[4]), zl[4], zh[4], x[4], y[4], zs[4])
(5): QSORT(ins(x[5], ys[5])) → SPLIT(x[5], ys[5])
(6): IF_1(pair(zl[6], zh[6]), x[6], y[6], zs[6]) → COND_IF_1(>@z(x[6], y[6]), zl[6], zh[6], x[6], y[6], zs[6])
(7): SPLIT(x[7], ins(y[7], zs[7])) → COND_SPLIT1(>=@z(y[7], x[7]), x[7], y[7], zs[7])
(8): IF_3(pair(yl[8], yh[8]), x[8], ys[8]) → QSORT(yh[8])
(9): APP(cons(x[9], ys[9]), zs[9]) → APP(ys[9], zs[9])
(10): COND_SPLIT(TRUE, x[10], y[10], zs[10]) → IF_1(split(x[10], zs[10]), x[10], y[10], zs[10])
(11): IF_3(pair(yl[11], yh[11]), x[11], ys[11]) → QSORT(yl[11])
(12): COND_SPLIT1(TRUE, x[12], y[12], zs[12]) → SPLIT(x[12], zs[12])
(13): COND_SPLIT1(TRUE, x[13], y[13], zs[13]) → IF_2(split(x[13], zs[13]), x[13], y[13], zs[13])

(0) -> (3), if ((x[0]* x[3])∧(ys[0]* ys[3])∧(split(x[0], ys[0]) →* pair(yl[3], yh[3])))


(0) -> (8), if ((x[0]* x[8])∧(ys[0]* ys[8])∧(split(x[0], ys[0]) →* pair(yl[8], yh[8])))


(0) -> (11), if ((x[0]* x[11])∧(ys[0]* ys[11])∧(split(x[0], ys[0]) →* pair(yl[11], yh[11])))


(1) -> (2), if ((zs[1]* ins(y[2], zs[2]))∧(x[1]* x[2]))


(1) -> (7), if ((zs[1]* ins(y[7], zs[7]))∧(x[1]* x[7]))


(2) -> (1), if ((zs[2]* zs[1])∧(x[2]* x[1])∧(y[2]* y[1])∧(>@z(x[2], y[2]) →* TRUE))


(2) -> (10), if ((zs[2]* zs[10])∧(x[2]* x[10])∧(y[2]* y[10])∧(>@z(x[2], y[2]) →* TRUE))


(3) -> (9), if ((qsort(yl[3]) →* cons(x[9], ys[9])))


(5) -> (2), if ((ys[5]* ins(y[2], zs[2]))∧(x[5]* x[2]))


(5) -> (7), if ((ys[5]* ins(y[7], zs[7]))∧(x[5]* x[7]))


(7) -> (12), if ((zs[7]* zs[12])∧(x[7]* x[12])∧(y[7]* y[12])∧(>=@z(y[7], x[7]) →* TRUE))


(7) -> (13), if ((zs[7]* zs[13])∧(x[7]* x[13])∧(y[7]* y[13])∧(>=@z(y[7], x[7]) →* TRUE))


(8) -> (0), if ((yh[8]* ins(x[0], ys[0])))


(8) -> (5), if ((yh[8]* ins(x[5], ys[5])))


(9) -> (9), if ((zs[9]* zs[9]a)∧(ys[9]* cons(x[9]a, ys[9]a)))


(10) -> (6), if ((zs[10]* zs[6])∧(x[10]* x[6])∧(y[10]* y[6])∧(split(x[10], zs[10]) →* pair(zl[6], zh[6])))


(11) -> (0), if ((yl[11]* ins(x[0], ys[0])))


(11) -> (5), if ((yl[11]* ins(x[5], ys[5])))


(12) -> (2), if ((zs[12]* ins(y[2], zs[2]))∧(x[12]* x[2]))


(12) -> (7), if ((zs[12]* ins(y[7], zs[7]))∧(x[12]* x[7]))


(13) -> (4), if ((zs[13]* zs[4])∧(x[13]* x[4])∧(y[13]* y[4])∧(split(x[13], zs[13]) →* pair(zl[4], zh[4])))



The set Q consists of the following terms:

if_3(pair(x0, x1), x2, x3)
if_1(pair(x0, x1), x2, x3, x4)
qsort(ins(x0, x1))
if_2(pair(x0, x1), x2, x3, x4)
Cond_if_2(TRUE, x0, x1, x2, x3, x4)
app(cons(x0, x1), x2)
split(x0, e)
Cond_if_1(TRUE, x0, x1, x2, x3, x4)
Cond_split(TRUE, x0, x1, x2)
split(x0, ins(x1, x2))
Cond_split1(TRUE, x0, x1, x2)
qsort(e)
app(nil, x0)


The approximation of the Dependency Graph [LPAR04,FROCOS05,EDGSTAR] contains 3 SCCs with 6 less nodes.

↳ ITRS
  ↳ ITRStoIDPProof
    ↳ IDP
      ↳ IDependencyGraphProof
        ↳ AND
IDP
            ↳ UsableRulesProof
          ↳ IDP
          ↳ IDP

I DP problem:
The following domains are used:

z

The ITRS R consists of the following rules:

if_3(pair(yl, yh), x, ys) → app(qsort(yl), cons(x, qsort(yh)))
if_1(pair(zl, zh), x, y, zs) → Cond_if_1(>@z(x, y), zl, zh, x, y, zs)
qsort(ins(x, ys)) → if_3(split(x, ys), x, ys)
if_2(pair(zl, zh), x, y, zs) → Cond_if_2(>=@z(y, x), zl, zh, x, y, zs)
Cond_if_2(TRUE, zl, zh, x, y, zs) → pair(zl, ins(y, zh))
app(cons(x, ys), zs) → cons(x, app(ys, zs))
split(x, e) → pair(e, e)
Cond_if_1(TRUE, zl, zh, x, y, zs) → pair(ins(y, zl), zh)
Cond_split(TRUE, x, y, zs) → if_1(split(x, zs), x, y, zs)
split(x, ins(y, zs)) → Cond_split1(>=@z(y, x), x, y, zs)
Cond_split1(TRUE, x, y, zs) → if_2(split(x, zs), x, y, zs)
qsort(e) → nil
app(nil, zs) → zs
split(x, ins(y, zs)) → Cond_split(>@z(x, y), x, y, zs)

The integer pair graph contains the following rules and edges:

(1): COND_SPLIT(TRUE, x[1], y[1], zs[1]) → SPLIT(x[1], zs[1])
(2): SPLIT(x[2], ins(y[2], zs[2])) → COND_SPLIT(>@z(x[2], y[2]), x[2], y[2], zs[2])
(12): COND_SPLIT1(TRUE, x[12], y[12], zs[12]) → SPLIT(x[12], zs[12])
(7): SPLIT(x[7], ins(y[7], zs[7])) → COND_SPLIT1(>=@z(y[7], x[7]), x[7], y[7], zs[7])

(2) -> (1), if ((zs[2]* zs[1])∧(x[2]* x[1])∧(y[2]* y[1])∧(>@z(x[2], y[2]) →* TRUE))


(12) -> (2), if ((zs[12]* ins(y[2], zs[2]))∧(x[12]* x[2]))


(12) -> (7), if ((zs[12]* ins(y[7], zs[7]))∧(x[12]* x[7]))


(1) -> (2), if ((zs[1]* ins(y[2], zs[2]))∧(x[1]* x[2]))


(1) -> (7), if ((zs[1]* ins(y[7], zs[7]))∧(x[1]* x[7]))


(7) -> (12), if ((zs[7]* zs[12])∧(x[7]* x[12])∧(y[7]* y[12])∧(>=@z(y[7], x[7]) →* TRUE))



The set Q consists of the following terms:

if_3(pair(x0, x1), x2, x3)
if_1(pair(x0, x1), x2, x3, x4)
qsort(ins(x0, x1))
if_2(pair(x0, x1), x2, x3, x4)
Cond_if_2(TRUE, x0, x1, x2, x3, x4)
app(cons(x0, x1), x2)
split(x0, e)
Cond_if_1(TRUE, x0, x1, x2, x3, x4)
Cond_split(TRUE, x0, x1, x2)
split(x0, ins(x1, x2))
Cond_split1(TRUE, x0, x1, x2)
qsort(e)
app(nil, x0)


As all Q-normal forms are R-normal forms we are in the innermost case. Hence, by the usable rules processor [LPAR04] we can delete all non-usable rules [FROCOS05] from R.

↳ ITRS
  ↳ ITRStoIDPProof
    ↳ IDP
      ↳ IDependencyGraphProof
        ↳ AND
          ↳ IDP
            ↳ UsableRulesProof
IDP
                ↳ IDPNonInfProof
          ↳ IDP
          ↳ IDP

I DP problem:
The following domains are used:

z

R is empty.
The integer pair graph contains the following rules and edges:

(1): COND_SPLIT(TRUE, x[1], y[1], zs[1]) → SPLIT(x[1], zs[1])
(2): SPLIT(x[2], ins(y[2], zs[2])) → COND_SPLIT(>@z(x[2], y[2]), x[2], y[2], zs[2])
(12): COND_SPLIT1(TRUE, x[12], y[12], zs[12]) → SPLIT(x[12], zs[12])
(7): SPLIT(x[7], ins(y[7], zs[7])) → COND_SPLIT1(>=@z(y[7], x[7]), x[7], y[7], zs[7])

(2) -> (1), if ((zs[2]* zs[1])∧(x[2]* x[1])∧(y[2]* y[1])∧(>@z(x[2], y[2]) →* TRUE))


(12) -> (2), if ((zs[12]* ins(y[2], zs[2]))∧(x[12]* x[2]))


(12) -> (7), if ((zs[12]* ins(y[7], zs[7]))∧(x[12]* x[7]))


(1) -> (2), if ((zs[1]* ins(y[2], zs[2]))∧(x[1]* x[2]))


(1) -> (7), if ((zs[1]* ins(y[7], zs[7]))∧(x[1]* x[7]))


(7) -> (12), if ((zs[7]* zs[12])∧(x[7]* x[12])∧(y[7]* y[12])∧(>=@z(y[7], x[7]) →* TRUE))



The set Q consists of the following terms:

if_3(pair(x0, x1), x2, x3)
if_1(pair(x0, x1), x2, x3, x4)
qsort(ins(x0, x1))
if_2(pair(x0, x1), x2, x3, x4)
Cond_if_2(TRUE, x0, x1, x2, x3, x4)
app(cons(x0, x1), x2)
split(x0, e)
Cond_if_1(TRUE, x0, x1, x2, x3, x4)
Cond_split(TRUE, x0, x1, x2)
split(x0, ins(x1, x2))
Cond_split1(TRUE, x0, x1, x2)
qsort(e)
app(nil, x0)


The constraints were generated the following way:
The DP Problem is simplified using the Induction Calculus [NONINF] with the following steps:
Note that final constraints are written in bold face.


For Pair COND_SPLIT(TRUE, x[1], y[1], zs[1]) → SPLIT(x[1], zs[1]) the following chains were created:




For Pair SPLIT(x[2], ins(y[2], zs[2])) → COND_SPLIT(>@z(x[2], y[2]), x[2], y[2], zs[2]) the following chains were created:




For Pair COND_SPLIT1(TRUE, x[12], y[12], zs[12]) → SPLIT(x[12], zs[12]) the following chains were created:




For Pair SPLIT(x[7], ins(y[7], zs[7])) → COND_SPLIT1(>=@z(y[7], x[7]), x[7], y[7], zs[7]) the following chains were created:




To summarize, we get the following constraints P for the following pairs.



The constraints for P> respective Pbound are constructed from P where we just replace every occurence of "t ≥ s" in P by "t > s" respective "t ≥ c". Here c stands for the fresh constant used for Pbound.
Using the following integer polynomial ordering the resulting constraints can be solved
Polynomial interpretation over integers with natural coefficients for non-tuple symbols [NONINF][POLO]:

POL(>=@z(x1, x2)) = 0   
POL(ins(x1, x2)) = 1 + x2   
POL(COND_SPLIT(x1, x2, x3, x4)) = 1 + x4 + (2)x2   
POL(TRUE) = 0   
POL(COND_SPLIT1(x1, x2, x3, x4)) = 1 + x4 + (2)x2   
POL(FALSE) = 0   
POL(SPLIT(x1, x2)) = 1 + x2 + (2)x1   
POL(undefined) = 0   
POL(>@z(x1, x2)) = 0   

The following pairs are in P>:

SPLIT(x[7], ins(y[7], zs[7])) → COND_SPLIT1(>=@z(y[7], x[7]), x[7], y[7], zs[7])

The following pairs are in Pbound:

COND_SPLIT(TRUE, x[1], y[1], zs[1]) → SPLIT(x[1], zs[1])
SPLIT(x[2], ins(y[2], zs[2])) → COND_SPLIT(>@z(x[2], y[2]), x[2], y[2], zs[2])
COND_SPLIT1(TRUE, x[12], y[12], zs[12]) → SPLIT(x[12], zs[12])
SPLIT(x[7], ins(y[7], zs[7])) → COND_SPLIT1(>=@z(y[7], x[7]), x[7], y[7], zs[7])

The following pairs are in P:

COND_SPLIT(TRUE, x[1], y[1], zs[1]) → SPLIT(x[1], zs[1])
SPLIT(x[2], ins(y[2], zs[2])) → COND_SPLIT(>@z(x[2], y[2]), x[2], y[2], zs[2])
COND_SPLIT1(TRUE, x[12], y[12], zs[12]) → SPLIT(x[12], zs[12])

There are no usable rules.

↳ ITRS
  ↳ ITRStoIDPProof
    ↳ IDP
      ↳ IDependencyGraphProof
        ↳ AND
          ↳ IDP
            ↳ UsableRulesProof
              ↳ IDP
                ↳ IDPNonInfProof
                  ↳ AND
IDP
                      ↳ IDependencyGraphProof
                    ↳ IDP
          ↳ IDP
          ↳ IDP

I DP problem:
The following domains are used:none

R is empty.
The integer pair graph is empty.
The set Q consists of the following terms:

if_3(pair(x0, x1), x2, x3)
if_1(pair(x0, x1), x2, x3, x4)
qsort(ins(x0, x1))
if_2(pair(x0, x1), x2, x3, x4)
Cond_if_2(TRUE, x0, x1, x2, x3, x4)
app(cons(x0, x1), x2)
split(x0, e)
Cond_if_1(TRUE, x0, x1, x2, x3, x4)
Cond_split(TRUE, x0, x1, x2)
split(x0, ins(x1, x2))
Cond_split1(TRUE, x0, x1, x2)
qsort(e)
app(nil, x0)


The approximation of the Dependency Graph [LPAR04,FROCOS05,EDGSTAR] contains 0 SCCs.

↳ ITRS
  ↳ ITRStoIDPProof
    ↳ IDP
      ↳ IDependencyGraphProof
        ↳ AND
          ↳ IDP
            ↳ UsableRulesProof
              ↳ IDP
                ↳ IDPNonInfProof
                  ↳ AND
                    ↳ IDP
IDP
                      ↳ IDependencyGraphProof
          ↳ IDP
          ↳ IDP

I DP problem:
The following domains are used:

z

R is empty.
The integer pair graph contains the following rules and edges:

(1): COND_SPLIT(TRUE, x[1], y[1], zs[1]) → SPLIT(x[1], zs[1])
(2): SPLIT(x[2], ins(y[2], zs[2])) → COND_SPLIT(>@z(x[2], y[2]), x[2], y[2], zs[2])
(12): COND_SPLIT1(TRUE, x[12], y[12], zs[12]) → SPLIT(x[12], zs[12])

(2) -> (1), if ((zs[2]* zs[1])∧(x[2]* x[1])∧(y[2]* y[1])∧(>@z(x[2], y[2]) →* TRUE))


(12) -> (2), if ((zs[12]* ins(y[2], zs[2]))∧(x[12]* x[2]))


(1) -> (2), if ((zs[1]* ins(y[2], zs[2]))∧(x[1]* x[2]))



The set Q consists of the following terms:

if_3(pair(x0, x1), x2, x3)
if_1(pair(x0, x1), x2, x3, x4)
qsort(ins(x0, x1))
if_2(pair(x0, x1), x2, x3, x4)
Cond_if_2(TRUE, x0, x1, x2, x3, x4)
app(cons(x0, x1), x2)
split(x0, e)
Cond_if_1(TRUE, x0, x1, x2, x3, x4)
Cond_split(TRUE, x0, x1, x2)
split(x0, ins(x1, x2))
Cond_split1(TRUE, x0, x1, x2)
qsort(e)
app(nil, x0)


The approximation of the Dependency Graph [LPAR04,FROCOS05,EDGSTAR] contains 1 SCC with 1 less node.

↳ ITRS
  ↳ ITRStoIDPProof
    ↳ IDP
      ↳ IDependencyGraphProof
        ↳ AND
          ↳ IDP
            ↳ UsableRulesProof
              ↳ IDP
                ↳ IDPNonInfProof
                  ↳ AND
                    ↳ IDP
                    ↳ IDP
                      ↳ IDependencyGraphProof
IDP
                          ↳ IDPNonInfProof
          ↳ IDP
          ↳ IDP

I DP problem:
The following domains are used:

z

R is empty.
The integer pair graph contains the following rules and edges:

(1): COND_SPLIT(TRUE, x[1], y[1], zs[1]) → SPLIT(x[1], zs[1])
(2): SPLIT(x[2], ins(y[2], zs[2])) → COND_SPLIT(>@z(x[2], y[2]), x[2], y[2], zs[2])

(2) -> (1), if ((zs[2]* zs[1])∧(x[2]* x[1])∧(y[2]* y[1])∧(>@z(x[2], y[2]) →* TRUE))


(1) -> (2), if ((zs[1]* ins(y[2], zs[2]))∧(x[1]* x[2]))



The set Q consists of the following terms:

if_3(pair(x0, x1), x2, x3)
if_1(pair(x0, x1), x2, x3, x4)
qsort(ins(x0, x1))
if_2(pair(x0, x1), x2, x3, x4)
Cond_if_2(TRUE, x0, x1, x2, x3, x4)
app(cons(x0, x1), x2)
split(x0, e)
Cond_if_1(TRUE, x0, x1, x2, x3, x4)
Cond_split(TRUE, x0, x1, x2)
split(x0, ins(x1, x2))
Cond_split1(TRUE, x0, x1, x2)
qsort(e)
app(nil, x0)


The constraints were generated the following way:
The DP Problem is simplified using the Induction Calculus [NONINF] with the following steps:
Note that final constraints are written in bold face.


For Pair COND_SPLIT(TRUE, x[1], y[1], zs[1]) → SPLIT(x[1], zs[1]) the following chains were created:




For Pair SPLIT(x[2], ins(y[2], zs[2])) → COND_SPLIT(>@z(x[2], y[2]), x[2], y[2], zs[2]) the following chains were created:




To summarize, we get the following constraints P for the following pairs.



The constraints for P> respective Pbound are constructed from P where we just replace every occurence of "t ≥ s" in P by "t > s" respective "t ≥ c". Here c stands for the fresh constant used for Pbound.
Using the following integer polynomial ordering the resulting constraints can be solved
Polynomial interpretation over integers with natural coefficients for non-tuple symbols [NONINF][POLO]:

POL(ins(x1, x2)) = 2 + x2   
POL(COND_SPLIT(x1, x2, x3, x4)) = -1 + x4 + x2   
POL(TRUE) = 0   
POL(FALSE) = 0   
POL(SPLIT(x1, x2)) = -1 + x2 + x1   
POL(undefined) = 0   
POL(>@z(x1, x2)) = 0   

The following pairs are in P>:

SPLIT(x[2], ins(y[2], zs[2])) → COND_SPLIT(>@z(x[2], y[2]), x[2], y[2], zs[2])

The following pairs are in Pbound:

COND_SPLIT(TRUE, x[1], y[1], zs[1]) → SPLIT(x[1], zs[1])
SPLIT(x[2], ins(y[2], zs[2])) → COND_SPLIT(>@z(x[2], y[2]), x[2], y[2], zs[2])

The following pairs are in P:

COND_SPLIT(TRUE, x[1], y[1], zs[1]) → SPLIT(x[1], zs[1])

There are no usable rules.

↳ ITRS
  ↳ ITRStoIDPProof
    ↳ IDP
      ↳ IDependencyGraphProof
        ↳ AND
          ↳ IDP
            ↳ UsableRulesProof
              ↳ IDP
                ↳ IDPNonInfProof
                  ↳ AND
                    ↳ IDP
                    ↳ IDP
                      ↳ IDependencyGraphProof
                        ↳ IDP
                          ↳ IDPNonInfProof
                            ↳ AND
IDP
                                ↳ IDependencyGraphProof
                              ↳ IDP
          ↳ IDP
          ↳ IDP

I DP problem:
The following domains are used:none

R is empty.
The integer pair graph is empty.
The set Q consists of the following terms:

if_3(pair(x0, x1), x2, x3)
if_1(pair(x0, x1), x2, x3, x4)
qsort(ins(x0, x1))
if_2(pair(x0, x1), x2, x3, x4)
Cond_if_2(TRUE, x0, x1, x2, x3, x4)
app(cons(x0, x1), x2)
split(x0, e)
Cond_if_1(TRUE, x0, x1, x2, x3, x4)
Cond_split(TRUE, x0, x1, x2)
split(x0, ins(x1, x2))
Cond_split1(TRUE, x0, x1, x2)
qsort(e)
app(nil, x0)


The approximation of the Dependency Graph [LPAR04,FROCOS05,EDGSTAR] contains 0 SCCs.

↳ ITRS
  ↳ ITRStoIDPProof
    ↳ IDP
      ↳ IDependencyGraphProof
        ↳ AND
          ↳ IDP
            ↳ UsableRulesProof
              ↳ IDP
                ↳ IDPNonInfProof
                  ↳ AND
                    ↳ IDP
                    ↳ IDP
                      ↳ IDependencyGraphProof
                        ↳ IDP
                          ↳ IDPNonInfProof
                            ↳ AND
                              ↳ IDP
IDP
                                ↳ IDependencyGraphProof
          ↳ IDP
          ↳ IDP

I DP problem:
The following domains are used:none

R is empty.
The integer pair graph contains the following rules and edges:

(1): COND_SPLIT(TRUE, x[1], y[1], zs[1]) → SPLIT(x[1], zs[1])


The set Q consists of the following terms:

if_3(pair(x0, x1), x2, x3)
if_1(pair(x0, x1), x2, x3, x4)
qsort(ins(x0, x1))
if_2(pair(x0, x1), x2, x3, x4)
Cond_if_2(TRUE, x0, x1, x2, x3, x4)
app(cons(x0, x1), x2)
split(x0, e)
Cond_if_1(TRUE, x0, x1, x2, x3, x4)
Cond_split(TRUE, x0, x1, x2)
split(x0, ins(x1, x2))
Cond_split1(TRUE, x0, x1, x2)
qsort(e)
app(nil, x0)


The approximation of the Dependency Graph [LPAR04,FROCOS05,EDGSTAR] contains 0 SCCs with 1 less node.

↳ ITRS
  ↳ ITRStoIDPProof
    ↳ IDP
      ↳ IDependencyGraphProof
        ↳ AND
          ↳ IDP
IDP
            ↳ UsableRulesProof
          ↳ IDP

I DP problem:
The following domains are used:

z

The ITRS R consists of the following rules:

if_3(pair(yl, yh), x, ys) → app(qsort(yl), cons(x, qsort(yh)))
if_1(pair(zl, zh), x, y, zs) → Cond_if_1(>@z(x, y), zl, zh, x, y, zs)
qsort(ins(x, ys)) → if_3(split(x, ys), x, ys)
if_2(pair(zl, zh), x, y, zs) → Cond_if_2(>=@z(y, x), zl, zh, x, y, zs)
Cond_if_2(TRUE, zl, zh, x, y, zs) → pair(zl, ins(y, zh))
app(cons(x, ys), zs) → cons(x, app(ys, zs))
split(x, e) → pair(e, e)
Cond_if_1(TRUE, zl, zh, x, y, zs) → pair(ins(y, zl), zh)
Cond_split(TRUE, x, y, zs) → if_1(split(x, zs), x, y, zs)
split(x, ins(y, zs)) → Cond_split1(>=@z(y, x), x, y, zs)
Cond_split1(TRUE, x, y, zs) → if_2(split(x, zs), x, y, zs)
qsort(e) → nil
app(nil, zs) → zs
split(x, ins(y, zs)) → Cond_split(>@z(x, y), x, y, zs)

The integer pair graph contains the following rules and edges:

(9): APP(cons(x[9], ys[9]), zs[9]) → APP(ys[9], zs[9])

(9) -> (9), if ((zs[9]* zs[9]a)∧(ys[9]* cons(x[9]a, ys[9]a)))



The set Q consists of the following terms:

if_3(pair(x0, x1), x2, x3)
if_1(pair(x0, x1), x2, x3, x4)
qsort(ins(x0, x1))
if_2(pair(x0, x1), x2, x3, x4)
Cond_if_2(TRUE, x0, x1, x2, x3, x4)
app(cons(x0, x1), x2)
split(x0, e)
Cond_if_1(TRUE, x0, x1, x2, x3, x4)
Cond_split(TRUE, x0, x1, x2)
split(x0, ins(x1, x2))
Cond_split1(TRUE, x0, x1, x2)
qsort(e)
app(nil, x0)


As all Q-normal forms are R-normal forms we are in the innermost case. Hence, by the usable rules processor [LPAR04] we can delete all non-usable rules [FROCOS05] from R.

↳ ITRS
  ↳ ITRStoIDPProof
    ↳ IDP
      ↳ IDependencyGraphProof
        ↳ AND
          ↳ IDP
          ↳ IDP
            ↳ UsableRulesProof
IDP
                ↳ IDPNonInfProof
          ↳ IDP

I DP problem:
The following domains are used:none

R is empty.
The integer pair graph contains the following rules and edges:

(9): APP(cons(x[9], ys[9]), zs[9]) → APP(ys[9], zs[9])

(9) -> (9), if ((zs[9]* zs[9]a)∧(ys[9]* cons(x[9]a, ys[9]a)))



The set Q consists of the following terms:

if_3(pair(x0, x1), x2, x3)
if_1(pair(x0, x1), x2, x3, x4)
qsort(ins(x0, x1))
if_2(pair(x0, x1), x2, x3, x4)
Cond_if_2(TRUE, x0, x1, x2, x3, x4)
app(cons(x0, x1), x2)
split(x0, e)
Cond_if_1(TRUE, x0, x1, x2, x3, x4)
Cond_split(TRUE, x0, x1, x2)
split(x0, ins(x1, x2))
Cond_split1(TRUE, x0, x1, x2)
qsort(e)
app(nil, x0)


The constraints were generated the following way:
The DP Problem is simplified using the Induction Calculus [NONINF] with the following steps:
Note that final constraints are written in bold face.


For Pair APP(cons(x[9], ys[9]), zs[9]) → APP(ys[9], zs[9]) the following chains were created:




To summarize, we get the following constraints P for the following pairs.



The constraints for P> respective Pbound are constructed from P where we just replace every occurence of "t ≥ s" in P by "t > s" respective "t ≥ c". Here c stands for the fresh constant used for Pbound.
Using the following integer polynomial ordering the resulting constraints can be solved
Polynomial interpretation over integers with natural coefficients for non-tuple symbols [NONINF][POLO]:

POL(cons(x1, x2)) = 1 + x2   
POL(APP(x1, x2)) = -1 + (-1)x2 + (2)x1   
POL(TRUE) = 0   
POL(FALSE) = 0   
POL(undefined) = 0   

The following pairs are in P>:

APP(cons(x[9], ys[9]), zs[9]) → APP(ys[9], zs[9])

The following pairs are in Pbound:

APP(cons(x[9], ys[9]), zs[9]) → APP(ys[9], zs[9])

The following pairs are in P:
none

There are no usable rules.

↳ ITRS
  ↳ ITRStoIDPProof
    ↳ IDP
      ↳ IDependencyGraphProof
        ↳ AND
          ↳ IDP
          ↳ IDP
            ↳ UsableRulesProof
              ↳ IDP
                ↳ IDPNonInfProof
IDP
                    ↳ IDependencyGraphProof
          ↳ IDP

I DP problem:
The following domains are used:none

R is empty.
The integer pair graph is empty.
The set Q consists of the following terms:

if_3(pair(x0, x1), x2, x3)
if_1(pair(x0, x1), x2, x3, x4)
qsort(ins(x0, x1))
if_2(pair(x0, x1), x2, x3, x4)
Cond_if_2(TRUE, x0, x1, x2, x3, x4)
app(cons(x0, x1), x2)
split(x0, e)
Cond_if_1(TRUE, x0, x1, x2, x3, x4)
Cond_split(TRUE, x0, x1, x2)
split(x0, ins(x1, x2))
Cond_split1(TRUE, x0, x1, x2)
qsort(e)
app(nil, x0)


The approximation of the Dependency Graph [LPAR04,FROCOS05,EDGSTAR] contains 0 SCCs.

↳ ITRS
  ↳ ITRStoIDPProof
    ↳ IDP
      ↳ IDependencyGraphProof
        ↳ AND
          ↳ IDP
          ↳ IDP
IDP
            ↳ UsableRulesProof

I DP problem:
The following domains are used:

z

The ITRS R consists of the following rules:

if_3(pair(yl, yh), x, ys) → app(qsort(yl), cons(x, qsort(yh)))
if_1(pair(zl, zh), x, y, zs) → Cond_if_1(>@z(x, y), zl, zh, x, y, zs)
qsort(ins(x, ys)) → if_3(split(x, ys), x, ys)
if_2(pair(zl, zh), x, y, zs) → Cond_if_2(>=@z(y, x), zl, zh, x, y, zs)
Cond_if_2(TRUE, zl, zh, x, y, zs) → pair(zl, ins(y, zh))
app(cons(x, ys), zs) → cons(x, app(ys, zs))
split(x, e) → pair(e, e)
Cond_if_1(TRUE, zl, zh, x, y, zs) → pair(ins(y, zl), zh)
Cond_split(TRUE, x, y, zs) → if_1(split(x, zs), x, y, zs)
split(x, ins(y, zs)) → Cond_split1(>=@z(y, x), x, y, zs)
Cond_split1(TRUE, x, y, zs) → if_2(split(x, zs), x, y, zs)
qsort(e) → nil
app(nil, zs) → zs
split(x, ins(y, zs)) → Cond_split(>@z(x, y), x, y, zs)

The integer pair graph contains the following rules and edges:

(8): IF_3(pair(yl[8], yh[8]), x[8], ys[8]) → QSORT(yh[8])
(11): IF_3(pair(yl[11], yh[11]), x[11], ys[11]) → QSORT(yl[11])
(0): QSORT(ins(x[0], ys[0])) → IF_3(split(x[0], ys[0]), x[0], ys[0])

(11) -> (0), if ((yl[11]* ins(x[0], ys[0])))


(0) -> (11), if ((x[0]* x[11])∧(ys[0]* ys[11])∧(split(x[0], ys[0]) →* pair(yl[11], yh[11])))


(0) -> (8), if ((x[0]* x[8])∧(ys[0]* ys[8])∧(split(x[0], ys[0]) →* pair(yl[8], yh[8])))


(8) -> (0), if ((yh[8]* ins(x[0], ys[0])))



The set Q consists of the following terms:

if_3(pair(x0, x1), x2, x3)
if_1(pair(x0, x1), x2, x3, x4)
qsort(ins(x0, x1))
if_2(pair(x0, x1), x2, x3, x4)
Cond_if_2(TRUE, x0, x1, x2, x3, x4)
app(cons(x0, x1), x2)
split(x0, e)
Cond_if_1(TRUE, x0, x1, x2, x3, x4)
Cond_split(TRUE, x0, x1, x2)
split(x0, ins(x1, x2))
Cond_split1(TRUE, x0, x1, x2)
qsort(e)
app(nil, x0)


As all Q-normal forms are R-normal forms we are in the innermost case. Hence, by the usable rules processor [LPAR04] we can delete all non-usable rules [FROCOS05] from R.

↳ ITRS
  ↳ ITRStoIDPProof
    ↳ IDP
      ↳ IDependencyGraphProof
        ↳ AND
          ↳ IDP
          ↳ IDP
          ↳ IDP
            ↳ UsableRulesProof
IDP
                ↳ IDPtoQDPProof

I DP problem:
The following domains are used:

z

The ITRS R consists of the following rules:

if_1(pair(zl, zh), x, y, zs) → Cond_if_1(>@z(x, y), zl, zh, x, y, zs)
if_2(pair(zl, zh), x, y, zs) → Cond_if_2(>=@z(y, x), zl, zh, x, y, zs)
split(x, ins(y, zs)) → Cond_split(>@z(x, y), x, y, zs)
Cond_split(TRUE, x, y, zs) → if_1(split(x, zs), x, y, zs)
split(x, ins(y, zs)) → Cond_split1(>=@z(y, x), x, y, zs)
Cond_split1(TRUE, x, y, zs) → if_2(split(x, zs), x, y, zs)
Cond_if_2(TRUE, zl, zh, x, y, zs) → pair(zl, ins(y, zh))
split(x, e) → pair(e, e)
Cond_if_1(TRUE, zl, zh, x, y, zs) → pair(ins(y, zl), zh)

The integer pair graph contains the following rules and edges:

(8): IF_3(pair(yl[8], yh[8]), x[8], ys[8]) → QSORT(yh[8])
(11): IF_3(pair(yl[11], yh[11]), x[11], ys[11]) → QSORT(yl[11])
(0): QSORT(ins(x[0], ys[0])) → IF_3(split(x[0], ys[0]), x[0], ys[0])

(11) -> (0), if ((yl[11]* ins(x[0], ys[0])))


(0) -> (11), if ((x[0]* x[11])∧(ys[0]* ys[11])∧(split(x[0], ys[0]) →* pair(yl[11], yh[11])))


(0) -> (8), if ((x[0]* x[8])∧(ys[0]* ys[8])∧(split(x[0], ys[0]) →* pair(yl[8], yh[8])))


(8) -> (0), if ((yh[8]* ins(x[0], ys[0])))



The set Q consists of the following terms:

if_3(pair(x0, x1), x2, x3)
if_1(pair(x0, x1), x2, x3, x4)
qsort(ins(x0, x1))
if_2(pair(x0, x1), x2, x3, x4)
Cond_if_2(TRUE, x0, x1, x2, x3, x4)
app(cons(x0, x1), x2)
split(x0, e)
Cond_if_1(TRUE, x0, x1, x2, x3, x4)
Cond_split(TRUE, x0, x1, x2)
split(x0, ins(x1, x2))
Cond_split1(TRUE, x0, x1, x2)
qsort(e)
app(nil, x0)


Represented integers and predefined function symbols by Terms

↳ ITRS
  ↳ ITRStoIDPProof
    ↳ IDP
      ↳ IDependencyGraphProof
        ↳ AND
          ↳ IDP
          ↳ IDP
          ↳ IDP
            ↳ UsableRulesProof
              ↳ IDP
                ↳ IDPtoQDPProof
QDP
                    ↳ QReductionProof

Q DP problem:
The TRS P consists of the following rules:

IF_3(pair(yl[8], yh[8]), x[8], ys[8]) → QSORT(yh[8])
IF_3(pair(yl[11], yh[11]), x[11], ys[11]) → QSORT(yl[11])
QSORT(ins(x[0], ys[0])) → IF_3(split(x[0], ys[0]), x[0], ys[0])

The TRS R consists of the following rules:

if_1(pair(zl, zh), x, y, zs) → Cond_if_1(greater_int(x, y), zl, zh, x, y, zs)
if_2(pair(zl, zh), x, y, zs) → Cond_if_2(greatereq_int(y, x), zl, zh, x, y, zs)
split(x, ins(y, zs)) → Cond_split(greater_int(x, y), x, y, zs)
Cond_split(true, x, y, zs) → if_1(split(x, zs), x, y, zs)
split(x, ins(y, zs)) → Cond_split1(greatereq_int(y, x), x, y, zs)
Cond_split1(true, x, y, zs) → if_2(split(x, zs), x, y, zs)
Cond_if_2(true, zl, zh, x, y, zs) → pair(zl, ins(y, zh))
split(x, e) → pair(e, e)
Cond_if_1(true, zl, zh, x, y, zs) → pair(ins(y, zl), zh)
greater_int(pos(0), pos(0)) → false
greater_int(pos(0), neg(0)) → false
greater_int(neg(0), pos(0)) → false
greater_int(neg(0), neg(0)) → false
greater_int(pos(0), pos(s(y))) → false
greater_int(neg(0), pos(s(y))) → false
greater_int(pos(0), neg(s(y))) → true
greater_int(neg(0), neg(s(y))) → true
greater_int(pos(s(x)), pos(0)) → true
greater_int(neg(s(x)), pos(0)) → false
greater_int(pos(s(x)), neg(0)) → true
greater_int(neg(s(x)), neg(0)) → false
greater_int(pos(s(x)), neg(s(y))) → true
greater_int(neg(s(x)), pos(s(y))) → false
greater_int(pos(s(x)), pos(s(y))) → greater_int(pos(x), pos(y))
greater_int(neg(s(x)), neg(s(y))) → greater_int(neg(x), neg(y))
greatereq_int(pos(x), pos(0)) → true
greatereq_int(neg(0), pos(0)) → true
greatereq_int(neg(0), neg(y)) → true
greatereq_int(pos(x), neg(y)) → true
greatereq_int(pos(0), pos(s(y))) → false
greatereq_int(neg(x), pos(s(y))) → false
greatereq_int(neg(s(x)), pos(0)) → false
greatereq_int(neg(s(x)), neg(0)) → false
greatereq_int(pos(s(x)), pos(s(y))) → greatereq_int(pos(x), pos(y))
greatereq_int(neg(s(x)), neg(s(y))) → greatereq_int(neg(x), neg(y))

The set Q consists of the following terms:

if_3(pair(x0, x1), x2, x3)
if_1(pair(x0, x1), x2, x3, x4)
qsort(ins(x0, x1))
if_2(pair(x0, x1), x2, x3, x4)
Cond_if_2(true, x0, x1, x2, x3, x4)
app(cons(x0, x1), x2)
split(x0, e)
Cond_if_1(true, x0, x1, x2, x3, x4)
Cond_split(true, x0, x1, x2)
split(x0, ins(x1, x2))
Cond_split1(true, x0, x1, x2)
qsort(e)
app(nil, x0)
greater_int(pos(0), pos(0))
greater_int(pos(0), neg(0))
greater_int(neg(0), pos(0))
greater_int(neg(0), neg(0))
greater_int(pos(0), pos(s(x0)))
greater_int(neg(0), pos(s(x0)))
greater_int(pos(0), neg(s(x0)))
greater_int(neg(0), neg(s(x0)))
greater_int(pos(s(x0)), pos(0))
greater_int(neg(s(x0)), pos(0))
greater_int(pos(s(x0)), neg(0))
greater_int(neg(s(x0)), neg(0))
greater_int(pos(s(x0)), neg(s(x1)))
greater_int(neg(s(x0)), pos(s(x1)))
greater_int(pos(s(x0)), pos(s(x1)))
greater_int(neg(s(x0)), neg(s(x1)))
greatereq_int(pos(x0), pos(0))
greatereq_int(neg(0), pos(0))
greatereq_int(neg(0), neg(x0))
greatereq_int(pos(x0), neg(x1))
greatereq_int(pos(0), pos(s(x0)))
greatereq_int(neg(x0), pos(s(x1)))
greatereq_int(neg(s(x0)), pos(0))
greatereq_int(neg(s(x0)), neg(0))
greatereq_int(pos(s(x0)), pos(s(x1)))
greatereq_int(neg(s(x0)), neg(s(x1)))

We have to consider all minimal (P,Q,R)-chains.
We deleted the following terms from Q as each root-symbol of these terms does neither occur in P nor in R.[THIEMANN].

if_3(pair(x0, x1), x2, x3)
qsort(ins(x0, x1))
app(cons(x0, x1), x2)
qsort(e)
app(nil, x0)



↳ ITRS
  ↳ ITRStoIDPProof
    ↳ IDP
      ↳ IDependencyGraphProof
        ↳ AND
          ↳ IDP
          ↳ IDP
          ↳ IDP
            ↳ UsableRulesProof
              ↳ IDP
                ↳ IDPtoQDPProof
                  ↳ QDP
                    ↳ QReductionProof
QDP
                        ↳ QDPOrderProof

Q DP problem:
The TRS P consists of the following rules:

IF_3(pair(yl[8], yh[8]), x[8], ys[8]) → QSORT(yh[8])
IF_3(pair(yl[11], yh[11]), x[11], ys[11]) → QSORT(yl[11])
QSORT(ins(x[0], ys[0])) → IF_3(split(x[0], ys[0]), x[0], ys[0])

The TRS R consists of the following rules:

if_1(pair(zl, zh), x, y, zs) → Cond_if_1(greater_int(x, y), zl, zh, x, y, zs)
if_2(pair(zl, zh), x, y, zs) → Cond_if_2(greatereq_int(y, x), zl, zh, x, y, zs)
split(x, ins(y, zs)) → Cond_split(greater_int(x, y), x, y, zs)
Cond_split(true, x, y, zs) → if_1(split(x, zs), x, y, zs)
split(x, ins(y, zs)) → Cond_split1(greatereq_int(y, x), x, y, zs)
Cond_split1(true, x, y, zs) → if_2(split(x, zs), x, y, zs)
Cond_if_2(true, zl, zh, x, y, zs) → pair(zl, ins(y, zh))
split(x, e) → pair(e, e)
Cond_if_1(true, zl, zh, x, y, zs) → pair(ins(y, zl), zh)
greater_int(pos(0), pos(0)) → false
greater_int(pos(0), neg(0)) → false
greater_int(neg(0), pos(0)) → false
greater_int(neg(0), neg(0)) → false
greater_int(pos(0), pos(s(y))) → false
greater_int(neg(0), pos(s(y))) → false
greater_int(pos(0), neg(s(y))) → true
greater_int(neg(0), neg(s(y))) → true
greater_int(pos(s(x)), pos(0)) → true
greater_int(neg(s(x)), pos(0)) → false
greater_int(pos(s(x)), neg(0)) → true
greater_int(neg(s(x)), neg(0)) → false
greater_int(pos(s(x)), neg(s(y))) → true
greater_int(neg(s(x)), pos(s(y))) → false
greater_int(pos(s(x)), pos(s(y))) → greater_int(pos(x), pos(y))
greater_int(neg(s(x)), neg(s(y))) → greater_int(neg(x), neg(y))
greatereq_int(pos(x), pos(0)) → true
greatereq_int(neg(0), pos(0)) → true
greatereq_int(neg(0), neg(y)) → true
greatereq_int(pos(x), neg(y)) → true
greatereq_int(pos(0), pos(s(y))) → false
greatereq_int(neg(x), pos(s(y))) → false
greatereq_int(neg(s(x)), pos(0)) → false
greatereq_int(neg(s(x)), neg(0)) → false
greatereq_int(pos(s(x)), pos(s(y))) → greatereq_int(pos(x), pos(y))
greatereq_int(neg(s(x)), neg(s(y))) → greatereq_int(neg(x), neg(y))

The set Q consists of the following terms:

if_1(pair(x0, x1), x2, x3, x4)
if_2(pair(x0, x1), x2, x3, x4)
Cond_if_2(true, x0, x1, x2, x3, x4)
split(x0, e)
Cond_if_1(true, x0, x1, x2, x3, x4)
Cond_split(true, x0, x1, x2)
split(x0, ins(x1, x2))
Cond_split1(true, x0, x1, x2)
greater_int(pos(0), pos(0))
greater_int(pos(0), neg(0))
greater_int(neg(0), pos(0))
greater_int(neg(0), neg(0))
greater_int(pos(0), pos(s(x0)))
greater_int(neg(0), pos(s(x0)))
greater_int(pos(0), neg(s(x0)))
greater_int(neg(0), neg(s(x0)))
greater_int(pos(s(x0)), pos(0))
greater_int(neg(s(x0)), pos(0))
greater_int(pos(s(x0)), neg(0))
greater_int(neg(s(x0)), neg(0))
greater_int(pos(s(x0)), neg(s(x1)))
greater_int(neg(s(x0)), pos(s(x1)))
greater_int(pos(s(x0)), pos(s(x1)))
greater_int(neg(s(x0)), neg(s(x1)))
greatereq_int(pos(x0), pos(0))
greatereq_int(neg(0), pos(0))
greatereq_int(neg(0), neg(x0))
greatereq_int(pos(x0), neg(x1))
greatereq_int(pos(0), pos(s(x0)))
greatereq_int(neg(x0), pos(s(x1)))
greatereq_int(neg(s(x0)), pos(0))
greatereq_int(neg(s(x0)), neg(0))
greatereq_int(pos(s(x0)), pos(s(x1)))
greatereq_int(neg(s(x0)), neg(s(x1)))

We have to consider all minimal (P,Q,R)-chains.
We use the reduction pair processor [LPAR04].


The following pairs can be oriented strictly and are deleted.


QSORT(ins(x[0], ys[0])) → IF_3(split(x[0], ys[0]), x[0], ys[0])
The remaining pairs can at least be oriented weakly.

IF_3(pair(yl[8], yh[8]), x[8], ys[8]) → QSORT(yh[8])
IF_3(pair(yl[11], yh[11]), x[11], ys[11]) → QSORT(yl[11])
Used ordering: Polynomial interpretation [POLO]:

POL(0) = 0   
POL(Cond_if_1(x1, x2, x3, x4, x5, x6)) = 1 + x2 + x3   
POL(Cond_if_2(x1, x2, x3, x4, x5, x6)) = 1 + x2 + x3   
POL(Cond_split(x1, x2, x3, x4)) = 1 + x4   
POL(Cond_split1(x1, x2, x3, x4)) = 1 + x4   
POL(IF_3(x1, x2, x3)) = x1   
POL(QSORT(x1)) = x1   
POL(e) = 0   
POL(false) = 0   
POL(greater_int(x1, x2)) = 0   
POL(greatereq_int(x1, x2)) = x2   
POL(if_1(x1, x2, x3, x4)) = 1 + x1   
POL(if_2(x1, x2, x3, x4)) = 1 + x1   
POL(ins(x1, x2)) = 1 + x2   
POL(neg(x1)) = x1   
POL(pair(x1, x2)) = x1 + x2   
POL(pos(x1)) = x1   
POL(s(x1)) = 1 + x1   
POL(split(x1, x2)) = x2   
POL(true) = 0   

The following usable rules [FROCOS05] were oriented:

if_2(pair(zl, zh), x, y, zs) → Cond_if_2(greatereq_int(y, x), zl, zh, x, y, zs)
split(x, ins(y, zs)) → Cond_split(greater_int(x, y), x, y, zs)
if_1(pair(zl, zh), x, y, zs) → Cond_if_1(greater_int(x, y), zl, zh, x, y, zs)
split(x, ins(y, zs)) → Cond_split1(greatereq_int(y, x), x, y, zs)
Cond_split(true, x, y, zs) → if_1(split(x, zs), x, y, zs)
Cond_if_2(true, zl, zh, x, y, zs) → pair(zl, ins(y, zh))
Cond_split1(true, x, y, zs) → if_2(split(x, zs), x, y, zs)
Cond_if_1(true, zl, zh, x, y, zs) → pair(ins(y, zl), zh)
split(x, e) → pair(e, e)



↳ ITRS
  ↳ ITRStoIDPProof
    ↳ IDP
      ↳ IDependencyGraphProof
        ↳ AND
          ↳ IDP
          ↳ IDP
          ↳ IDP
            ↳ UsableRulesProof
              ↳ IDP
                ↳ IDPtoQDPProof
                  ↳ QDP
                    ↳ QReductionProof
                      ↳ QDP
                        ↳ QDPOrderProof
QDP
                            ↳ DependencyGraphProof

Q DP problem:
The TRS P consists of the following rules:

IF_3(pair(yl[8], yh[8]), x[8], ys[8]) → QSORT(yh[8])
IF_3(pair(yl[11], yh[11]), x[11], ys[11]) → QSORT(yl[11])

The TRS R consists of the following rules:

if_1(pair(zl, zh), x, y, zs) → Cond_if_1(greater_int(x, y), zl, zh, x, y, zs)
if_2(pair(zl, zh), x, y, zs) → Cond_if_2(greatereq_int(y, x), zl, zh, x, y, zs)
split(x, ins(y, zs)) → Cond_split(greater_int(x, y), x, y, zs)
Cond_split(true, x, y, zs) → if_1(split(x, zs), x, y, zs)
split(x, ins(y, zs)) → Cond_split1(greatereq_int(y, x), x, y, zs)
Cond_split1(true, x, y, zs) → if_2(split(x, zs), x, y, zs)
Cond_if_2(true, zl, zh, x, y, zs) → pair(zl, ins(y, zh))
split(x, e) → pair(e, e)
Cond_if_1(true, zl, zh, x, y, zs) → pair(ins(y, zl), zh)
greater_int(pos(0), pos(0)) → false
greater_int(pos(0), neg(0)) → false
greater_int(neg(0), pos(0)) → false
greater_int(neg(0), neg(0)) → false
greater_int(pos(0), pos(s(y))) → false
greater_int(neg(0), pos(s(y))) → false
greater_int(pos(0), neg(s(y))) → true
greater_int(neg(0), neg(s(y))) → true
greater_int(pos(s(x)), pos(0)) → true
greater_int(neg(s(x)), pos(0)) → false
greater_int(pos(s(x)), neg(0)) → true
greater_int(neg(s(x)), neg(0)) → false
greater_int(pos(s(x)), neg(s(y))) → true
greater_int(neg(s(x)), pos(s(y))) → false
greater_int(pos(s(x)), pos(s(y))) → greater_int(pos(x), pos(y))
greater_int(neg(s(x)), neg(s(y))) → greater_int(neg(x), neg(y))
greatereq_int(pos(x), pos(0)) → true
greatereq_int(neg(0), pos(0)) → true
greatereq_int(neg(0), neg(y)) → true
greatereq_int(pos(x), neg(y)) → true
greatereq_int(pos(0), pos(s(y))) → false
greatereq_int(neg(x), pos(s(y))) → false
greatereq_int(neg(s(x)), pos(0)) → false
greatereq_int(neg(s(x)), neg(0)) → false
greatereq_int(pos(s(x)), pos(s(y))) → greatereq_int(pos(x), pos(y))
greatereq_int(neg(s(x)), neg(s(y))) → greatereq_int(neg(x), neg(y))

The set Q consists of the following terms:

if_1(pair(x0, x1), x2, x3, x4)
if_2(pair(x0, x1), x2, x3, x4)
Cond_if_2(true, x0, x1, x2, x3, x4)
split(x0, e)
Cond_if_1(true, x0, x1, x2, x3, x4)
Cond_split(true, x0, x1, x2)
split(x0, ins(x1, x2))
Cond_split1(true, x0, x1, x2)
greater_int(pos(0), pos(0))
greater_int(pos(0), neg(0))
greater_int(neg(0), pos(0))
greater_int(neg(0), neg(0))
greater_int(pos(0), pos(s(x0)))
greater_int(neg(0), pos(s(x0)))
greater_int(pos(0), neg(s(x0)))
greater_int(neg(0), neg(s(x0)))
greater_int(pos(s(x0)), pos(0))
greater_int(neg(s(x0)), pos(0))
greater_int(pos(s(x0)), neg(0))
greater_int(neg(s(x0)), neg(0))
greater_int(pos(s(x0)), neg(s(x1)))
greater_int(neg(s(x0)), pos(s(x1)))
greater_int(pos(s(x0)), pos(s(x1)))
greater_int(neg(s(x0)), neg(s(x1)))
greatereq_int(pos(x0), pos(0))
greatereq_int(neg(0), pos(0))
greatereq_int(neg(0), neg(x0))
greatereq_int(pos(x0), neg(x1))
greatereq_int(pos(0), pos(s(x0)))
greatereq_int(neg(x0), pos(s(x1)))
greatereq_int(neg(s(x0)), pos(0))
greatereq_int(neg(s(x0)), neg(0))
greatereq_int(pos(s(x0)), pos(s(x1)))
greatereq_int(neg(s(x0)), neg(s(x1)))

We have to consider all minimal (P,Q,R)-chains.
The approximation of the Dependency Graph [LPAR04,FROCOS05,EDGSTAR] contains 0 SCCs with 2 less nodes.